/**
 * @file
 * @author  Tsin Smith <tsin.creator@gmail.com>
 *
 * @section DESCRIPTION
 *
 */

#ifndef __TSIN_RUNTIME_GAMERUNTIME_HPP__
#define __TSIN_RUNTIME_GAMERUNTIME_HPP__

#include <tsin/runtime/common.hpp>

#include <tsin/util/Set.hpp>

namespace tsin {

        class Config;
        class Display;
        class Game;
        class Input;
        class Timer;

        class Player;
        class Enemy;
        class BulletRuntime;

        class RUNTIME_DLLEXPORT GameRuntime {
        public:
                GameRuntime(Config &config, Display &display,
                            Input &input, Timer &timer);
                ~GameRuntime();

        public:
                Config &config;
                Display &display;
                Input &input;
                Timer &timer;
                Game *game;

                Set<Player *> *players;
                Set<Enemy *> *enemies;
                Set<BulletRuntime *> *player_bullets, *enemy_bullets;
        };

        RUNTIME_DLLEXPORT extern GameRuntime *currentGame;

}

#endif /* __TSIN_RUNTIME_GAMERUNTIME_HPP__ */
